package com.probox.common.entity.service.customer;

import com.baomidou.mybatisplus.extension.service.IService;
import com.probox.common.entity.domain.system.SysDictData;
import com.probox.common.entity.vo.customer.CustomerLeveListlVo;
import com.probox.common.entity.vo.customer.CustomerLevelPrivleageVo;
import com.probox.common.entity.vo.customer.CustomerLevelVo;
import com.probox.common.entity.vo.customer.PaymentRuleVo;
import com.probox.customer.api.domain.CustomerLevel;
import com.probox.customer.api.domain.CustomerLevelOpenVo;
import com.probox.customer.api.domain.CustomerPrivilegeOpenVo;

import java.util.List;


/**
 * 客户等级Service接口
 *
 * @author zsy
 * @date 2021-05-27
 */
public interface ICustomerLevelService extends IService<CustomerLevel> {
    /**
     * 获取可以选择的等级
     *
     * @param levelId
     * @return
     */
    public List<SysDictData> getLevel(Long levelId);


    /**
     * 新的 修改权益
     *
     * @param customerLevelVo
     * @return
     */
    public boolean updateLevelPrivileageInfoNew(CustomerLeveListlVo customerLevelVo);

    /**
     * 新的客户等级添加
     *
     * @param customerLevelVo
     * @return
     */
    public boolean saveLevelPrivileageInfoNew(CustomerLeveListlVo customerLevelVo);


    /**
     * 查询客户等级
     *
     * @param levelId 客户等级ID
     * @return 客户等级
     */
    public CustomerLevel selectCustomerLevelById(Long levelId);


    /**
     * 查询客户等级列表
     *
     * @param customerLevel 客户等级
     * @return 客户等级集合
     */
    public List<CustomerLevel> queryList(CustomerLevel customerLevel);


    public List<CustomerLevel> queryCustomerLevelList();

    public List<CustomerPrivilegeOpenVo> selectLevelAndRightsByUserId(Long customerUid);

    public List<CustomerLevel> selectCustomerLevelAndRight(Long customerUid);

    /**
     * 新增客户等级
     *
     * @param customerLevel 客户等级
     * @return 结果
     */
    public boolean insertCustomerLevel(CustomerLevel customerLevel);

    /**
     * 修改客户等级
     *
     * @param customerLevel 客户等级
     * @return 结果
     */
    public boolean updateCustomerLevel(CustomerLevel customerLevel);

    /**
     * 批量删除客户等级
     *
     * @param levelIds 需要删除的客户等级ID
     * @return 结果
     */
    public boolean deleteCustomerLevelByIds(Long[] levelIds);

    /**
     * 查询客户免费客户模式等级列表
     *
     * @return 结果
     */
    public List<CustomerLeveListlVo> getLevelInfoList(CustomerLeveListlVo customerLevelVo, Integer pageNum, Integer pageSize);

    /**
     * 查询客户付费客户模式等级列表
     *
     * @return 结果
     */
    public List<CustomerLeveListlVo> getPayLevelInfoList(CustomerLeveListlVo customerLevelVo, Integer pageSize, Integer pageNum);

    /**
     * 查询免费客户模式详情
     *
     * @return 结果
     */
    public CustomerLevelVo getlevelInfoDetail(Long levelId);

    /**
     * 查询免费客户模式详情(前端)
     *
     * @return 结果
     */
    public CustomerLevelVo getlevelInfoDetailOpen(Long levelId, Long platformUid);

    /**
     * 新增客户等级权益信息
     *
     * @return 结果
     */
    public boolean saveLevelPrivileageInfo(CustomerLeveListlVo customerLevelVo);

    /**
     * 修改客户等级权益信息
     *
     * @return 结果
     */
    public boolean updateLevelPrivileage(CustomerLeveListlVo customerLevelVo);

    /*
     * 查看免费客户模式列表总数
     */
    Long getLevelInfoListCount(CustomerLeveListlVo customerLevelVo);


    /*
     * 查看付费客户模式列表总数
     */
    Long getPayLevelInfoListCount(CustomerLeveListlVo customerLevelVo);

    /**
     * 查看权益信息
     *
     * @return
     */
    public List<CustomerLevelPrivleageVo> getLevelPrivileageInfo();

    public List<PaymentRuleVo> getPaymentRuleInfo();

    /**
     * 查询付费等级列表
     *
     * @return
     */
    public List<CustomerLevel> getPayLevelInfo();

    /**
     * 查询会员及权益信息
     */
    public List<CustomerLevelOpenVo> getCustomerLevelInfo();

    /**
     * 查询会员及权益信息总数
     */
    public Integer getCustomerLevelInfoCount();

    /**
     * 查询指定等级id具体等级信息
     *
     * @param levelId
     * @return
     */
    public CustomerLevelOpenVo getByCustomerLevelInfoID(Long levelId);

    /**
     * 更新等级数量
     */
    public void updateLevelCustoemrCount(Long levelId);



    /**
     * 赠送等级升级礼包
     */
    public void giveLevelUpgradeGiftBag(Long custoemrUid, Long platformUid, Long levelUid);
}
